package com.ydd.service;

import com.ydd.dto.CancelCollectionDTO;
import com.ydd.dto.MyArticleCollectionDTO;
import com.ydd.dto.PageQueryDTO;
import com.github.pagehelper.Page;
import com.ydd.dto.ArticleAddDTO;
import com.ydd.dto.ArticleListDTO;
import com.ydd.dto.ArticlePageDTO;
import com.ydd.dto.MyArticleCollectionDTO;
import com.ydd.entity.Article;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ydd.result.PageResult;
import com.ydd.result.PageResult;
import com.ydd.vo.*;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hgz
 * @since 2023-05-30
 */
public interface IArticleService extends IService<Article> {

    /**
     * 我的文章分页查询
     * @param pageQueryDTO
     * @param userId
     * @return
     */
    PageResult getResult(PageQueryDTO pageQueryDTO,Integer userId);

    /**
     * 收藏分页
     * @param myArticleCollectionDTO
     * @param userId
     * @return
     */
    PageResult getResultByCondition(MyArticleCollectionDTO myArticleCollectionDTO,Integer userId);

    /**
     * 点赞收藏、取消点赞收藏
     * @param cancelCollectionDTO
     * @param userId
     * @return
     */
    void cancelCollection(CancelCollectionDTO cancelCollectionDTO, Integer userId);


    /**
     * 热门置顶文章数据(首页)
     * @param page
     * @param limit
     * @return
     */
    NewInfoVO getNewInfo(Integer page, Integer limit);

    /**
     * 文章列表数据
     * @param articlePageDTO
     * @return
     */
    PageResult getArticleList(ArticlePageDTO articlePageDTO);

    /**
     * 文章详情数据
     * @param id
     * @return
     */
    ArticleShowVO show(Integer id);

    /**
     * 最新文章
     * @return
     */
    ArticleResult hot();

    /**
     * 推荐文章
     * @return
     */
    ArticleResult recommend();

    /**
     * 发布文章
     * @param article
     * @param userId
     */
    void insert(Article article, Integer userId);


    //List<AritllllllVO> select(ArticleListDTO articleListDTO);

    ArticleListVO pageList(ArticleListDTO articleListDTO);

    void add(ArticleAddDTO articleAddDTO);


}
